package com.qianfeng1.day8_wednesday.reflect.clazz;


import com.qianfeng1.day8_wednesday.User;

import java.lang.reflect.Constructor;

/**
 * 作者：黎杭
 * 日期：2020/2/19
 */
public class TestConstructor {
    public static void main(String[] args) throws Exception {

        // User user = new User();// 这样是传统创建一个User对象，现在要求用反射去创建User对象

        // 使用反射的步骤：1拿到User类的反射（Class）类

        Class cls = User.class;// 这种看起来最简单，所以以后哪个简单就用哪个方法获取反射类

        // 第二步：既然是需要构造一个对象，那么我们需要Constructor对象
        Constructor constructor = cls.getDeclaredConstructor();// 无参构造是没有参数的，所以这里不用传参数

        // constructor 对象当前来说是描述User对象中的构造方法的。
        Object o = constructor.newInstance();// 用构造器去创建对象实例
        if (o instanceof User) {// 如果属于User类的对象，我们可以向下强制转型！
            User u = (User) o;// 这样做就是安全的
            u.setName("张三");
            System.err.println(u.getName());
        }
        System.err.println(o instanceof User);

        // 如果 类里边有公共的无参构造，直接可以创建对象，不必用Constructor来创建

        Object o1 = cls.newInstance();// 反射类直接创建对象

        System.err.println(o1 instanceof User);


    }
}
